#include <stdio.h>
#include <stdlib.h>
//struct Peo
//{
//    char name[20];
//    char sex[5];
//    char tele[12];
//    int high;
//};
//struct St
//{
//    struct Peo p;
//    int num;
//    float f;
//};
//void print(struct Peo pf)
//{
//    printf("%s %s %s %d\n",pf.name,pf.sex,pf.tele,pf.high);
//}
//void print1(struct St sf)
//{
//    printf("%s %s %s %d %d %f\n",sf.p.name,sf.p.sex,sf.p.tele,sf.p.high,sf.num,sf.f);
//}
//void print2(struct Peo* pg)
//{
//    printf("%s %s %s %d\n",pg->name,pg->sex,pg->tele,pg->high);
//}
//void print3(struct St* sg)
//{
//    printf("%s %s %s %d %d %f\n",sg->p.name,sg->p.sex,sg->p.tele,sg->p.high,sg->num,sg->f);
//}
//int main() {
//    struct Peo p1 ={"zhangsan","man","123456789",191};
//    struct St s = {{"lisi","man","1234578910",181},100,3.14};
//    //直接打印
//    printf("%s %s %s %d\n",p1.name,p1.sex,p1.tele,p1.high);
//    printf("%s %s %s %d %d %f\n",s.p.name,s.p.sex,s.p.tele,s.p.high,s.num,s.f);
//    //传值打印
//    print(p1);
//    print1(s);
//    //传址打印
//    print2(&p1);
//    print3(&s);
//    return 0;
//}
////第五题、统计二进制中1的个数
//写一个函数返回参数中二进制1的个数
////怎么拆出来原先的二进制数来跟1进行按位与？？？所以应该是1不动，待求二进制数每次右移一位，然后按位与。
//int count_number_of_1(int a)
//{
//    int i = 0;
//    int count = 0;
//    for(i = 0;i < 32;i++)
//    {
//        if(((a>>i) & 1) == 1)
//            count++;
//    }
//    return count;
//}
//int main()
//{
//    int a = 0;
//    scanf("%d",&a);
//    int n = count_number_of_1(a);
//    printf("%d\n",n);
//    return 0;
//}

////第三题、求两个数二进制中不同位的个数
////两个int（32位）整数m和n的二进制表达中，有多少位（bit）不同？
//int count_number_of(int m,int n)
//{
//    int i = 0;
//    int count = 0;
//    for(i = 0;i < 32;i++)
//    {
//        if(((m>>i) & 1) != ((n>>i) & 1))//两者移位进行比较就可以了
//            count++;
//    }
//    return count;
//}
//int main()
//{
//    int m = 0;
//    int n = 0;
//    scanf("%d %d",&m,&n);
//    int g= count_number_of(m,n);
//    printf("%d\n",g);
//    return 0;
//}

////第四题、打印整数二进制的奇数位和偶数位
////获取一个整数二进制序列中所有的偶数位和奇数位，分别打印出二进制序列。
//void binary(int a)
//{
//    int i = 0;
//    int arr[32] = {0};
//    for(i = 0;i < 32;i++)
//    {
//        if(((a>>i) & 1) == 1)
//            arr[i] = 1;
//        else
//            arr[i] = 0;
//    }
////    for(i = 31;i >= 0;i--)//完整打印 因为它是到这打印才能符合原来的二进制序列。
////        // 以“1”为例，二进制序列中的1是最后一位，但是在数组中是第[0]位。
////    {
////        printf("%d ",arr[i]);
////    }
////    printf("\n");
//    for(i= 31;i >= 0;i-=2)//画图分析可得，1是第[0]位，所以这个循环打印的是奇数位。
//    {
//        printf("%d ",arr[i]);
//    }
//    printf("\n");
//    for(i= 30;i >= 0;i-=2)//同理，那这个打印的就是偶数位了。
//    {
//        printf("%d ",arr[i]);
//    }
//}
//int main()
//{
//    int a = 0;
//    scanf("%d",&a);
//    binary(a);
//    return 0;
//}

//第六题、交换两个变量。
//不允许创建临时变量，交换两个整数的内容。
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d",&a,&b);
    printf("a=%d b=%d\n",a,b);
    //a^a=0;a^0=a
    a = a^b;//此时a里面记录着原先的b
    b = a^b;//b等于原先的a
    a = a^b;
    printf("a=%d b=%d\n",a,b);
    return 0;
}